﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FlotasDesktop;
using System.Data.SqlClient;

namespace GestorDeFlotasDesktop.AbmReloj
{
    public partial class AbmReloj : Form
    {
        String conexion;
        Boolean relojSeleccionadoDelListado;
        Boolean habilitado;
       public AbmReloj()
        {
            InitializeComponent();
            Utils utils = new Utils();
            conexion = utils.cargarProperties();
            relojSeleccionadoDelListado = false;
            habilitado = false;
            buttonBaja.Enabled = false;
            this.rellenarComboBoxMarcas();
            this.rellenarListadoReloj();

        }

        public void rellenarComboBoxMarcas()
        {
            using (SqlConnection connection = new SqlConnection(conexion))
            {
                try
                {
                    using (SqlCommand command = new SqlCommand())
                    {
                        command.Connection = connection;
                        command.CommandType = System.Data.CommandType.StoredProcedure;
                        command.CommandText = "TEQUILASO.sp_marcas_reloj";
                        using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                        {
                            DataTable dt = new DataTable();
                            adapter.Fill(dt);
                            marcaComboBox.DataSource = dt;
                            marcaComboBox.DisplayMember = "Descripcion";
                            marcaComboBox.ValueMember = "id";

                        }

                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al cargar marcas de automovil" + ex);
                }
            }
        }

        public void rellenarListadoReloj()
        {
            using (SqlConnection connection = new SqlConnection(conexion))
            {
                try
                {
                    using (SqlCommand command = new SqlCommand())
                    {
                        command.Connection = connection;
                        command.CommandType = System.Data.CommandType.StoredProcedure;
                        command.CommandText = "TEQUILASO.sp_listarReloj";
                        using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                        {
                            DataSet ds = new DataSet();
                            adapter.Fill(ds);
                            dataGridReloj.DataSource = ds.Tables[0];
                        }

                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al cargar marcas de automovil" + ex);
                }
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            if (marcaComboBox.Text != string.Empty && NumSerieTextBox.Text != string.Empty && modeloTextBox.Text != string.Empty)
            {
                this.altaReloj();
            }
            else { MessageBox.Show("Todos los campos deben estar completos", "Error"); }
        
        }


        private void button1_Click_1(object sender, EventArgs e)
        {
            if (marcaComboBox.Text != string.Empty && NumSerieTextBox.Text != string.Empty && modeloTextBox.Text != string.Empty)
            {
                this.altaReloj();
            }
            else { MessageBox.Show("Todos los campos deben estar completos", "Error"); }
        }

        private void altaReloj()
        {
            using (SqlConnection connection = new SqlConnection(conexion))
            {
                try
                {
                    using (SqlCommand command = new SqlCommand())
                    {
                        connection.Open();
                        command.Connection = connection;
                        command.CommandType = System.Data.CommandType.StoredProcedure;

                        command.CommandText = "TEQUILASO.sp_altaReloj";
                        command.Parameters.AddWithValue("@Nro_serie", NumSerieTextBox.Text); ;
                        command.Parameters.AddWithValue("@Modelo", modeloTextBox.Text);
                        command.Parameters.AddWithValue("@Id_Marca", marcaComboBox.SelectedValue);
                        command.Parameters.AddWithValue("@Fecha_Verificacion", fechaPicker.Value);
                        if (checkHabilitado.Checked)
                        {
                            command.Parameters.AddWithValue("@Habilitado", 1);
                        }
                        else
                        {
                            command.Parameters.AddWithValue("@Habilitado", 0);
                        }


                        using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                        {
                            DataSet ds = new DataSet();
                            adapter.Fill(ds);
                            dataGridReloj.DataSource = ds.Tables[0];
                        }
                        connection.Close();
                        rellenarListadoReloj();
                        dataGridReloj.Refresh();

                        MessageBox.Show("Alta realizada con exito");


                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (!checkHabilitado.Checked)
            {
                buttonModificar.Enabled = false;
                buttonBaja.Enabled = true;
            }
            else
            {
                buttonBaja.Enabled = false;
                buttonModificar.Enabled = true;
            }

        }

        private void buttonBuscar_Click(object sender, EventArgs e)
        {
            if (NumSerieTextBox.Text.Equals("") && modeloTextBox.Text.Equals("") && marcaComboBox.SelectedValue == null)
            {
                MessageBox.Show("No hay campos seleccionados para buscar.");
            }

            else
            {
                using (SqlConnection connection = new SqlConnection(conexion))
                {
                    try
                    {
                        using (SqlCommand command = new SqlCommand())
                        {
                            connection.Open();
                            command.Connection = connection;
                            command.CommandType = System.Data.CommandType.StoredProcedure;

                            command.CommandText = "TEQUILASO.sp_buscarReloj";
                            command.Parameters.AddWithValue("@Nro_serie", NumSerieTextBox.Text);
                            command.Parameters.AddWithValue("@Modelo", modeloTextBox.Text);
                            if (marcaComboBox.SelectedValue == null)
                            {
                                command.Parameters.AddWithValue("@Id_Marca",DBNull.Value);
                            }
                            else
                            {
                                command.Parameters.AddWithValue("@Id_Marca", marcaComboBox.SelectedValue);
                            }
                            using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                            {
                                DataSet ds = new DataSet();
                                adapter.Fill(ds);
                                dataGridReloj.DataSource = ds.Tables[0];
                            }

                            //rellenarListadoReloj();
                            dataGridReloj.Refresh();
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }

        }

        private void ejecutarSeleccion(DataGridViewCellEventArgs e)
        {
            NumSerieTextBox.Text = dataGridReloj.CurrentRow.Cells[0].Value.ToString();
            modeloTextBox.Text = dataGridReloj.CurrentRow.Cells[1].Value.ToString();
            Int32 resultIndex = -1;
            resultIndex = marcaComboBox.FindStringExact(dataGridReloj.CurrentRow.Cells[2].Value.ToString());
            marcaComboBox.SelectedIndex = resultIndex;
            DateTime MyDateTime;
            MyDateTime = new DateTime();
            MyDateTime = Convert.ToDateTime(dataGridReloj.CurrentRow.Cells[3].Value.ToString());
            fechaPicker.Value = MyDateTime;
            habilitado = (Boolean)dataGridReloj.CurrentRow.Cells[4].Value;
            checkHabilitado.Checked = habilitado;
            if (checkHabilitado.Checked)
            {
                buttonBaja.Enabled = false;
            }
            else {
                buttonBaja.Enabled = true;
            }
            relojSeleccionadoDelListado = true;

           
        }

        private void limpiarCampos() {

            NumSerieTextBox.Text = "";
            modeloTextBox.Text = "";
            marcaComboBox.SelectedValue = 0;
            checkHabilitado.Checked = false;
            relojSeleccionadoDelListado = false;
        
        }

        private void buttonModificar_Click(object sender, EventArgs e)
        {
            if (!relojSeleccionadoDelListado)
            {
                MessageBox.Show("No seleecionó ningun reloj para Modificar.");
            }
            else if (marcaComboBox.Text != string.Empty && NumSerieTextBox.Text != string.Empty && modeloTextBox.Text != string.Empty)
            {
                this.modificarReloj();
            }
            else { MessageBox.Show("Todos los campos deben estar completos", "Error"); }
        }

        private void modificarReloj()
        {
            using (SqlConnection connection = new SqlConnection(conexion))
                {
                    try
                    {
                        using (SqlCommand command = new SqlCommand())
                        {
                            connection.Open();
                            command.Connection = connection;
                            command.CommandType = System.Data.CommandType.StoredProcedure;

                            command.CommandText = "TEQUILASO.sp_modificarReloj";
                            command.Parameters.AddWithValue("@Nro_serie", NumSerieTextBox.Text);
                            command.Parameters.AddWithValue("@Modelo", modeloTextBox.Text);
                            command.Parameters.AddWithValue("@Id_Marca", marcaComboBox.SelectedValue);
                            command.Parameters.AddWithValue("@Fecha_Verificacion", fechaPicker.Value);
                            if (checkHabilitado.Checked)
                            {
                                command.Parameters.AddWithValue("@Habilitado", 1);
                            }
                            else
                            {
                                command.Parameters.AddWithValue("@Habilitado", 0);
                            }

                            command.ExecuteReader();
                            rellenarListadoReloj();
                            dataGridReloj.Refresh();
                            
                            connection.Close();
                            if (checkHabilitado.Checked)
                            {
                                MessageBox.Show("Modificación realizada con exito");
                                relojSeleccionadoDelListado = false;
                            }
                            else
                            {
                                MessageBox.Show("No se realizo la Modificación porque el Reloj no se encuentra habilitado.\n"+
                                                    "Seleccione el check HABILITADO y vuelva a hacer click en MODIFICAR.");
                                relojSeleccionadoDelListado = true;
                            }
                            
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
            }
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            limpiarCampos();
            rellenarListadoReloj();
            dataGridReloj.Refresh();
        }

        private void buttonBaja_Click(object sender, EventArgs e)
        {
            if(relojSeleccionadoDelListado && !habilitado){
                MessageBox.Show("El reloj ya se encontraba dado de baja.");
            }
            else if (validar())
            {
                using (SqlConnection connection = new SqlConnection(conexion))
                {
                    try
                    {
                        using (SqlCommand command = new SqlCommand())
                        {

                            connection.Open();
                            command.Connection = connection;
                            command.CommandType = System.Data.CommandType.StoredProcedure;
                            command.CommandText = "TEQUILASO.sp_modificarReloj";
                            command.Parameters.AddWithValue("@Nro_serie", NumSerieTextBox.Text);
                            command.Parameters.AddWithValue("@Modelo", modeloTextBox.Text);
                            if (marcaComboBox.SelectedValue == null)
                            {
                                command.Parameters.AddWithValue("@Id_Marca", DBNull.Value);
                            }
                            else
                            {
                                command.Parameters.AddWithValue("@Id_Marca", marcaComboBox.SelectedValue);
                            }
                            command.Parameters.AddWithValue("@Fecha_Verificacion", fechaPicker.Value);
                            if (checkHabilitado.Checked)
                            {
                                command.Parameters.AddWithValue("@Habilitado", 1);
                            }
                            else
                            {
                                command.Parameters.AddWithValue("@Habilitado", 0);
                            }
                            //command.ExecuteReader();
                            using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                            {
                                DataSet ds = new DataSet();
                                adapter.Fill(ds);
                                if (ds.Tables.Count > 0)
                                {
                                    MessageBox.Show("Baja realizada con éxito, recuerde que hay vehiculos que tienen asignado este reloj.");
                                }
                                else
                                {
                                    MessageBox.Show("Baja realizada con éxito");
                                }
                            }
                            connection.Close();

                            limpiarCampos();
                            rellenarListadoReloj();
                            dataGridReloj.Refresh();

                        }
                    }
                    catch (Exception ex)
                    {
                        //MessageBox.Show(ex.Message, "Baja reloj - error");
                        MessageBox.Show("El reloj se encuentra asignado a un Vehiculo.");
                    }
                }
            }
            else {
                MessageBox.Show("Recuerde que debe seleccionar un Reloj para realizar una baja,\n"+
                                    "y además que el campo Numero de Serie debe de estar completo.");
            }
            
        }

        private bool validar()
        {
            if (relojSeleccionadoDelListado && NumSerieTextBox.Text != string.Empty)
            {
                return true;
            }

            else { return false; }
        }

        private void dataGridReloj_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            limpiarCampos();
            this.ejecutarSeleccion(e);
        }

       
       
    }
}
